package 剑指Offer1;

public class _31翻转单词顺序 {
    public String reverseWords(String s) {
        if(s == null || s.length() == 0) return s;
        StringBuilder sb = new StringBuilder();
        s = s.trim(); //去掉首尾空格
        int j = s.length() - 1, i = j; //指向字符串最后一个位置
        while(i>=0){
            while(i>=0 && s.charAt(i)!=' ') i--; //找到最后一个单词的起始位置
            sb.append(s.substring(i+1,j+1)).append(' '); //左闭右开,在添加一个空格
            while (i>=0 && s.charAt(i) ==' ') i--; //跳过空格,找到下一个单词的最后一个位置
            j = i;//j指向下一个单词的尾字符
        }
        return sb.toString().trim(); //最后添加去除空格是为了保证最后一个空格
    }

    public String reverseWords2(String s) {
        if(s == null || s.length() == 0) return s;
        StringBuilder sb = new StringBuilder();
        s = s.trim(); //首先去除单词的前后空格
        int j = s.length() - 1, i = j;
        while(i>=0){
            while(i>=0 && s.charAt(i) != ' ') i--; //找到最后一个单词的起始位置
            sb.append(s.substring(i+1,j+1)).append(' ');
            while(i>=0 && s.charAt(i) == ' ') i--; //跳过单词之间的空格
            j = i;
        }
        return sb.toString().trim();
    }
}
